import i18n from '@/i18n'

/**
 * 邮箱
 * @param {*} s
 */
export function isEmail (s) {
  return /^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
}

export function validateEmail (rule, value, callback) {
  if (rule.required || !isEmpty(value)) {
    if (!isEmail(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': '邮箱' })))
    }
  }
  callback()
}

/**
 * 手机号码
 * @param {*} s
 */
export function isMobile (s) {
  return /^1[0-9]{10}$/.test(s)
}

export function validateMobile (rule, value, callback) {
  if (rule.required || !isEmpty(value)) {
    if (!isMobile(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': '手机号' })))
    }
  }
  callback()
}

/**
 * 电话号码
 * @param {*} s
 */
export function isPhone (s) {
  return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
}

export function validatePhone (rule, value, callback) {
  if (rule.required || !isEmpty(value)) {
    if (!isPhone(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': '电话号码' })))
    }
  }
  callback()
}

/**
 * URL地址
 * @param {*} s
 */
export function isURL (s) {
  return /^http[s]?:\/\/.*/.test(s)
}

export function validateUrl (rule, value, callback) {
  if (rule.required || !isEmpty(value)) {
    if (!isURL(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': 'URL' })))
    }
  }
  callback()
}

/**
 * 判断整数
 * @param s
 * @returns {boolean}
 */
export function isNum (s) {
  return /^-?[1-9]\d*$/.test(s)
}

export function validateNum (rule, value, callback) {
  if (rule.required || !isEmpty(value)) {
    if (!isNum(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': '整数' })))
    }
  }
  callback()
}

/**
 * 判断对象是否为空
 * @param {*} obj
 */
export function isEmpty (obj) {
  if (obj === false) return false
  if (!obj) return true
  if (Object.keys(obj).length === 0) return true
  return false
}

export function validateCard (rule, value, callback) {
  if (rule.required || !isEmpty(value)) {
    if (!isCard(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': '身份证号' })))
    }
  }
  callback()
}

export function validateMoney (rule, value, callback) {
  if (!isEmpty(value)) {
    if (!isMoney(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': '金额' })))
    }
  }
  callback()
}

export function validateDouble (rule, value, callback) {
  if (!isEmpty(value)) {
    if (!isMoney(value)) {
      return callback(new Error(i18n.t('validate.format', { 'attr': '数字' })))
    }
  }
  callback()
}

/**
 * 判断金额
 * @param s
 * @returns {boolean}
 */
export function isMoney (s) {
  return /(^([-]?)[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^([-]?)(0){1}$)|(^([-]?)[0-9]\.[0-9]([0-9])?$)/.test(s)
}

export function isCard (g) {
  g = g.toString()
  var i = [true, false, false, false, false] // new Array(true, false, false, false, false)
  var h = {
    11: '北京',
    12: '天津',
    13: '河北',
    14: '山西',
    15: '内蒙古',
    21: '辽宁',
    22: '吉林',
    23: '黑龙江',
    31: '上海',
    32: '江苏',
    33: '浙江',
    34: '安徽',
    35: '福建',
    36: '江西',
    37: '山东',
    41: '河南',
    42: '湖北',
    43: '湖南',
    44: '广东',
    45: '广西',
    46: '海南',
    50: '重庆',
    51: '四川',
    52: '贵州',
    53: '云南',
    54: '西藏',
    61: '陕西',
    62: '甘肃',
    63: '青海',
    64: '宁夏',
    65: '新疆',
    71: '台湾',
    81: '香港',
    82: '澳门',
    91: '国外'
  }
  var j, e
  var f, k
  var ereg
  var d = []
  d = g.split('')
  if (h[parseInt(g.substr(0, 2))] == null) {
    return i[4]
  }
  switch (g.length) {
    case 15:
      // if ((parseInt(g.substr(6, 2)) + 1900) % 4 === 0 || ((parseInt(g.substr(6, 2)) + 1900) % 100 === 0 && (parseInt(g.substr(6, 2)) + 1900) % 4 === 0)) {
      ereg = /^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$/
      // } else {
      //   ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/
      // }
      if (ereg.test(g)) {
        return i[0]
      } else {
        return i[2]
      }
    case 18:
      // if (parseInt(g.substr(6, 4)) % 4 === 0 || (parseInt(g.substr(6, 4)) % 100 === 0 && parseInt(g.substr(6, 4)) % 4 === 0)) {
      ereg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
      // } else {
      //   ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/
      // }
      if (ereg.test(g)) {
        f = (parseInt(d[0]) + parseInt(d[10])) * 7 + (parseInt(d[1]) + parseInt(d[11])) * 9 + (parseInt(d[2]) + parseInt(d[12])) * 10 + (parseInt(d[3]) + parseInt(d[13])) * 5 + (parseInt(d[4]) + parseInt(d[14])) * 8 + (parseInt(d[5]) + parseInt(d[15])) * 4 + (parseInt(d[6]) + parseInt(d[16])) * 2 + parseInt(d[7]) * 1 + parseInt(d[8]) * 6 + parseInt(d[9]) * 3
        j = f % 11
        k = 'F'
        e = '10X98765432'
        k = e.substr(j, 1)
        if (k === d[17]) {
          return i[0]
        } else {
          return i[3]
        }
      } else {
        return i[2]
      }
    default:
      return i[1]
  }
};
